package practice4;

import java.util.ArrayList;
import java.util.List;

public class Main1 {
    public static int solution(int[] numbers) {
        // 创建一个列表来存储每个数字组的数字列表
        List<List<Integer>> groups = new ArrayList<>();
        // 将每个输入的数字转换为数字列表并添加到 groups 中
        for (int number : numbers) {
            groups.add(toDigitList(number));
        }
        // 调用递归函数计算满足条件的组合数量
        return countEvenSumCombinations(groups, 0, 0);
    }

    // 辅助函数，将一个整数转换为包含其各位数字的列表
    private static List<Integer> toDigitList(int number) {
        List<Integer> list = new ArrayList<>();
        // 循环提取数字的每一位，并将其添加到列表的开头，以保持原始顺序
        while (number > 0) {
            list.add(0, number % 10); // 提取最后一位数字并插入列表头部
            number /= 10; // 去掉最后一位数字
        }
        return list;
    }

    // 递归函数，用于计算满足条件的组合数量
    private static int countEvenSumCombinations(List<List<Integer>> groups, int index, int currentSum) {
        // 如果已经处理完所有组
        if (index == groups.size()) {
            // 检查当前数字之和是否为偶数，如果是则返回 1，表示找到一个有效组合；否则返回 0
            return currentSum % 2 == 0 ? 1 : 0;
        }

        // 初始化计数器，用于记录满足条件的组合数量
        int count = 0;
        // 遍历当前组中的每个数字
        for (int num : groups.get(index)) {
            // 递归调用，处理下一个组，并更新当前数字之和
            count += countEvenSumCombinations(groups, index + 1, currentSum + num);
        }
        // 返回计数结果
        return count;
    }

    public static void main(String[] args) {
        // 测试样例 1
        System.out.println(solution(new int[]{123, 456, 789}) == 14); // 应输出 true
        // 测试样例 2
        System.out.println(solution(new int[]{123456789}) == 4); // 应输出 true
        // 测试样例 3
        System.out.println(solution(new int[]{14329, 7568}) == 10); // 应输出 true
    }
}